// 栈的基本操作：1. 初始化空栈， 2.判断栈是否为空， 3.判断栈是否已满， 4. 插入元素（进栈） 5.删除元素（出栈） 6. 获取栈顶元素

// 借助于数组

function Stack() {
    this.init()
}

// 初始化空栈
Stack.prototype.init = function (size = 100) {
    this.stack = []
    this.size = size
    this.top = -1
}

// 判断栈是否为空
Stack.prototype.isEmpty = function () {
    return this.top === -1
}

// 栈是否已满
Stack.prototype.isFull = function () {
    return this.top + 1 === this.size
}

// 入栈操作
Stack.prototype.push = function (value) {
    if (this.isFull()) {
        throw new Error('Stack is Full')
    } else {
        this.stack.push(value)
        this.top += 1
    }
}

// 出栈操作
Stack.prototype.pop = function () {
    if (this.isEmpty()) {
        throw new Error('Stack is Empty')
    } else {
        this.top -= 1
        return this.stack.pop()
    }
}

// 获取栈顶元素
Stack.prototype.peek = function () {
    if (this.isEmpty()) {
        throw new Error('Stack is Empty')
    } else {
        return this.stack[this.top]
    }
}

module.exports = Stack

